// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

library illegal_msg_mirror_test;

import "dart:isolate";
import "dart:mirrors";

import "package:expect/async_helper.dart";
import "package:expect/expect.dart";

class Class {
  method() {}
}

echo(sendPort) {
  final port = new ReceivePort();
  sendPort.send(port.sendPort);
  port.listen((msg) {
    sendPort.send("echoing ${msg(1)}}");
  });
}

void main([args, port]) {
  asyncStart();

  final ReceivePort port = new ReceivePort();

  // Ignore returned Future.
  Isolate.spawn(echo, port.sendPort);

  port.first.then((_snd) {
    SendPort snd = _snd;
    final methodMirror = reflectClass(Class).declarations[#method];
    try {
      snd.send(methodMirror);
    } catch (e) {
      // Expected behavior.
      port.close();
      asyncEnd();
      return;
    }
    Expect.fail("Should not be reached. Message sending didn't throw.");
  });
}
